# -*- coding:utf-8 -*-
from scrapy.spiders import Spider
__author__ = 'zhouphenix'


class XiaoHuarSpider(Spider):
    name = 'xiaohuar'
    allow_domains = ['xiaohuar.com']
    start_urls = ['http://www.xiaohuar.com/hua/', ]

    # 备注
    # 1.爬虫文件需要定义一个类，并继承 scrapy.spiders.Spider
    # 2.必须定义name，即爬虫名，如果没有name，会报错。因为源码中是这样定义的：
    # 3.编写函数parse，这里需要注意的是，该函数名不能改变，因为Scrapy源码中默认callback函数的函数名就是parse；
    # 4.定义需要爬取的url，放在列表中，因为可以爬取多个url，Scrapy源码是一个For循环，从上到下爬取这些url，使用生成器迭代将url发送给下载器下载url的html
    def parse(self, response):
        """
           分析页面
           找到页面中符合规则的内容（校花图片），保存
           找到所有的a标签，再访问其他a标签，一层一层的搞下去

            current_url = response.url  # 爬取时请求的url
            body = response.body    # 返回的html
            unicode_body = response.body_as_unicode()   # 返回的html unicode编码
        """
        from scrapy.selector import HtmlXPathSelector
        import re
        hxs = HtmlXPathSelector(response)
        print '---------------1--------------'
        # 如果url是 http://www.xiaohuar.com/list-1-\d+.html
        if re.match('http://www.xiaohuar.com/list-1-\d+.html', response.url):    # 如果url能够匹配到需要爬取的url，即本站url
            print '---------------2--------------'
            items = hxs.select('//div[@class="item_list infinite_scroll"]/div')   # select中填写查询目标，按scrapy查询语法书写
            for i in xrange(len(items)):
                # 查询所有img标签的src属性，即获取校花图片地址
                src = hxs.select(
                    '//div[@class="item_list infinite_scroll"]/div[%d]//div[@class="img"]/a/img/@src' % i).extract()
                # 获取span的文本内容，即校花姓名
                name = hxs.select(
                    '//div[@class="item_list infinite_scroll"]/div[%d]//div[@class="img"]/span/text()' % i).extract()
                # 校花学校
                school = hxs.select(
                    '//div[@class="item_list infinite_scroll"]/div[%d]//div[@class="img"]/div[@class="btns"]/a/text()' % i).extract()
                if src:
                    print '---------------3--------------'
                    ab_src = "http://www.xiaohuar.com" + src[0]  # 相对路径拼接
                    file_name = "%s_%s.jpg" % (
                    school[0].encode('utf-8'), name[0].encode('utf-8'))  # 文件名，因为python27默认编码格式是unicode编码，因此我们需要编码成utf-8
                    import os
                    import urllib
                    file_path = os.path.join("/beauty/pic", file_name)
                    urllib.urlretrieve(ab_src, file_path)

